package com.lazily.list_;


import java.util.ArrayList;

/**
 * @Author:  GZQ
 * @date:  2025/4/20 15:01
 * @description: ArrayList 的底层操作机制源码分析(重点, 难点.)
 * @version: 1.0
 */

public class ArrayListSource {
	// 程序入口
	@SuppressWarnings({"all"})
	public static void main(String[] args) {

		// 源码分析
		// ArrayList中维护了一个Object类型的数组elementData.
		// transient Object[]elementData; //transient表示瞬间，短暂的，表示该属性不会被序列化

		// idea 在debug 默认情况下, 显示的数据是简化的, 如果希望看到完整的数据
		// 需要做设置
		/*
			(1) 当创建ArrayList对象时, 使用无参构造器创建ArrayList对象,
			则初始化elementData容量为0, 第1次添加, 则扩容elementData为10,
			如需要再次扩容, 则扩容elementData为1.5倍, 使用debug进行查看
		*/
		// ArrayList list = new ArrayList();

		/*
			(2) 如果使用指定大小的构造器, 则初始的elementData为指定大小,
			如需要扩容, 则直接扩容为elementData为1.5倍, 使用debug进行查看
		 */

		ArrayList list = new ArrayList(8);
		// 使用for循环 给list集合添加 1-10 数据
		for (int i = 1; i <= 10; i++) {
			list.add(i);
		}
		// 使用for循环 给list集合添加 11-15 数据
		for (int i = 11; i <= 15; i++) {
			list.add(i);
		}
		list.add(100);
		list.add(200);
		list.add(null);
	}
}
